﻿using System;
using System.Collections.Generic;
using FluorineFx;
using Neturion.Dados;
using Neturion.Fachadas;

namespace Neturion.Servicos
{
    [RemotingService]
    public class ServicoTitulo
    {
        public Titulo Inserir(Titulo titulo, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().Inserir(titulo,usuarioPermissao);
        }

        public Titulo Atualizar(Titulo titulo, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().Atualizar(titulo,usuarioPermissao);
        }

        public Titulo AlterarValorVencimentoTitulo(Titulo titulo, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().AlterarValorVencimentoTitulo(titulo, usuarioPermissao);
        }
        
        public Titulo EstornarTitulo(Titulo titulo, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().EstornarTitulo(titulo, usuarioPermissao);
        }

        public decimal ObterValorTituloHoje(Titulo titulo)
        {
            return Fachada.GetInstancia().ObterValorTituloHoje(titulo);
        }

        public decimal ObterValorSaldoTitulo(Titulo titulo)
        {
            return Fachada.GetInstancia().ObterValorSaldoTitulo(titulo);
        }

        public Pagamento ObterUltimoPagamentoTitulo(Titulo titulo)
        {
            return Fachada.GetInstancia().ObterUltimoPagamentoTitulo(titulo);
        }

        public decimal ObterValorPagamentosTitulo(Titulo titulo)
        {
            return Fachada.GetInstancia().ObterValorPagamentosTitulo(titulo);
        }

        public void Excluir(Titulo titulo, Usuario usuarioPermissao)
        {
            Fachada.GetInstancia().Excluir(titulo,usuarioPermissao);
        }

        public Titulo ObterTituloPorId(long id)
        {
            return Fachada.GetInstancia().ObterTituloPorId(id);
        }

        public IList<Titulo> ObterTodosTitulos()
        {
            return Fachada.GetInstancia().ObterTodosTitulos();
        }

        public IList<Titulo> ObterTodosTitulos(int inicio, int quantidade, int quantidadeMinima, 
            string ipte,
            string nossoNumero,
            Usuario usuarioPermissao, 
            EnumTipoMovimentoFinanceiro enumTipoMovimentoFinanceiro, 
            string documento, string numeroMovimento, string numeroTitulo, string descricao, EnumSituacaoMovimento enumSituacaoMovimento, bool parcelado, Pessoa credorDevedor, Setor setor, FonteGeradora fonteGeradora, ContaContabil contaContabil, DateTime? emissaoDe, DateTime? emissaoAte, DateTime? vencimentoDe, DateTime? vencimentoAte, DateTime? aceitoDe, DateTime? aceitoAte, DateTime? quitadoDe, DateTime? quitadoAte, DateTime? estornadoDe, DateTime? estornadoAte, string valorDe, string valorAte, FormaPagamento formaPagamento, TipoFormaPagamento tipoFormaPagamento)
        {
            return Fachada.GetInstancia().ObterTodosTitulos(inicio, quantidade, quantidadeMinima, ipte, nossoNumero, usuarioPermissao, enumTipoMovimentoFinanceiro, documento, long.Parse(!string.IsNullOrEmpty(numeroMovimento) ? numeroMovimento : "0"), long.Parse(!string.IsNullOrEmpty(numeroTitulo)?numeroTitulo:"0"), descricao, enumSituacaoMovimento, parcelado, credorDevedor, setor, fonteGeradora, contaContabil, emissaoDe, emissaoAte, vencimentoDe, vencimentoAte, aceitoDe, aceitoAte, quitadoDe, quitadoAte, estornadoDe, estornadoAte, decimal.Parse(valorDe), decimal.Parse(valorAte), formaPagamento, tipoFormaPagamento);
        }

        public string GeracaoBoleto(Titulo titulo, Pessoa sacado, ContaBanco contaBanco, FormaPagamento formaPagamento, Usuario usuarioPermissao)
        {
            return Fachada.GetInstancia().GeracaoBoletoPorTitulo(titulo, sacado, contaBanco, formaPagamento, usuarioPermissao);
        }
    }
}